home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / hity wydania / Ubuntu 9.10 PL / karmelkowy-koliberek-desktop-9.10-i386-PL.iso / casper / filesystem.squashfs / usr / include / linux / nfsd / nfsfh.h < prev    next >
C/C++ Source or Header  |  2009-10-16  |  4KB  |  121 lines

  1. /*
  2.  * include/linux/nfsd/nfsfh.h
  3.  *
  4.  * This file describes the layout of the file handles as passed
  5.  * over the wire.
  6.  *
  7.  * Earlier versions of knfsd used to sign file handles using keyed MD5
  8.  * or SHA. I've removed this code, because it doesn't give you more
  9.  * security than blocking external access to port 2049 on your firewall.
  10.  *
  11.  * Copyright (C) 1995, 1996, 1997 Olaf Kirch <okir@monad.swb.de>
  12.  */
  13.  
  14. #ifndef _LINUX_NFSD_FH_H
  15. #define _LINUX_NFSD_FH_H
  16.  
  17. # include <linux/types.h>
  18. #include <linux/nfsd/const.h>
  19. #include <linux/nfsd/debug.h>
  20.  
  21. /*
  22.  * This is the old "dentry style" Linux NFSv2 file handle.
  23.  *
  24.  * The xino and xdev fields are currently used to transport the
  25.  * ino/dev of the exported inode.
  26.  */
  27. struct nfs_fhbase_old {
  28.     __u32        fb_dcookie;    /* dentry cookie - always 0xfeebbaca */
  29.     __u32        fb_ino;        /* our inode number */
  30.     __u32        fb_dirino;    /* dir inode number, 0 for directories */
  31.     __u32        fb_dev;        /* our device */
  32.     __u32        fb_xdev;
  33.     __u32        fb_xino;
  34.     __u32        fb_generation;
  35. };
  36.  
  37. /*
  38.  * This is the new flexible, extensible style NFSv2/v3 file handle.
  39.  * by Neil Brown <neilb@cse.unsw.edu.au> - March 2000
  40.  *
  41.  * The file handle is seens as a list of 4byte words.
  42.  * The first word contains a version number (1) and four descriptor bytes
  43.  * that tell how the remaining 3 variable length fields should be handled.
  44.  * These three bytes are auth_type, fsid_type and fileid_type.
  45.  *
  46.  * All 4byte values are in host-byte-order.
  47.  *
  48.  * The auth_type field specifies how the filehandle can be authenticated
  49.  * This might allow a file to be confirmed to be in a writable part of a
  50.  * filetree without checking the path from it upto the root.
  51.  * Current values:
  52.  *     0  - No authentication.  fb_auth is 0 bytes long
  53.  * Possible future values:
  54.  *     1  - 4 bytes taken from MD5 hash of the remainer of the file handle
  55.  *          prefixed by a secret and with the important export flags.
  56.  *
  57.  * The fsid_type identifies how the filesystem (or export point) is
  58.  *    encoded.
  59.  *  Current values:
  60.  *     0  - 4 byte device id (ms-2-bytes major, ls-2-bytes minor), 4byte inode number
  61.  *        NOTE: we cannot use the kdev_t device id value, because kdev_t.h
  62.  *              says we mustn't.  We must break it up and reassemble.
  63.  *     1  - 4 byte user specified identifier
  64.  *     2  - 4 byte major, 4 byte minor, 4 byte inode number - DEPRECATED
  65.  *     3  - 4 byte device id, encoded for user-space, 4 byte inode number
  66.  *     4  - 4 byte inode number and 4 byte uuid
  67.  *     5  - 8 byte uuid
  68.  *     6  - 16 byte uuid
  69.  *     7  - 8 byte inode number and 16 byte uuid
  70.  *
  71.  * The fileid_type identified how the file within the filesystem is encoded.
  72.  * This is (will be) passed to, and set by, the underlying filesystem if it supports
  73.  * filehandle operations.  The filesystem must not use the value '0' or '0xff' and may
  74.  * only use the values 1 and 2 as defined below:
  75.  *  Current values:
  76.  *    0   - The root, or export point, of the filesystem.  fb_fileid is 0 bytes.
  77.  *    1   - 32bit inode number, 32 bit generation number.
  78.  *    2   - 32bit inode number, 32 bit generation number, 32 bit parent directory inode number.
  79.  *
  80.  */
  81. struct nfs_fhbase_new {
  82.     __u8        fb_version;    /* == 1, even => nfs_fhbase_old */
  83.     __u8        fb_auth_type;
  84.     __u8        fb_fsid_type;
  85.     __u8        fb_fileid_type;
  86.     __u32        fb_auth[1];
  87. /*    __u32        fb_fsid[0]; floating */
  88. /*    __u32        fb_fileid[0]; floating */
  89. };
  90.  
  91. struct knfsd_fh {
  92.     unsigned int    fh_size;    /* significant for NFSv3.
  93.                      * Points to the current size while building
  94.                      * a new file handle
  95.                      */
  96.     union {
  97.         struct nfs_fhbase_old    fh_old;
  98.         __u32            fh_pad[NFS4_FHSIZE/4];
  99.         struct nfs_fhbase_new    fh_new;
  100.     } fh_base;
  101. };
  102.  
  103. #define ofh_dcookie        fh_base.fh_old.fb_dcookie
  104. #define ofh_ino            fh_base.fh_old.fb_ino
  105. #define ofh_dirino        fh_base.fh_old.fb_dirino
  106. #define ofh_dev            fh_base.fh_old.fb_dev
  107. #define ofh_xdev        fh_base.fh_old.fb_xdev
  108. #define ofh_xino        fh_base.fh_old.fb_xino
  109. #define ofh_generation        fh_base.fh_old.fb_generation
  110.  
  111. #define    fh_version        fh_base.fh_new.fb_version
  112. #define    fh_fsid_type        fh_base.fh_new.fb_fsid_type
  113. #define    fh_auth_type        fh_base.fh_new.fb_auth_type
  114. #define    fh_fileid_type        fh_base.fh_new.fb_fileid_type
  115. #define    fh_auth            fh_base.fh_new.fb_auth
  116. #define    fh_fsid            fh_base.fh_new.fb_auth
  117.  
  118.  
  119.  
  120. #endif /* _LINUX_NFSD_FH_H */
  121.